package pe.edu.upc.dai.grupovictor.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dai.grupovictor.dao.TipoEvaluacionDao;
import pe.edu.upc.dai.grupovictor.dao.util.ConnectionUtils;
import pe.edu.upc.dai.grupovictor.dao.util.DaoException;
import pe.edu.upc.dai.grupovictor.model.TipoEvaluacion;

public class TipoEvaluacionDaoImpl implements TipoEvaluacionDao {

    public TipoEvaluacion seleccionarPorPrimaryKey(Long id) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        TipoEvaluacion tipoEvaluacion = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM TIPO_EVALUACION WHERE ID_TIPO_EVALUACION = ?");
            st.setLong(1, id);
            rs = st.executeQuery();
            if (rs.next()) {
                tipoEvaluacion = new TipoEvaluacion();
                tipoEvaluacion.setIdTipoEvaluacion(rs.getLong("ID_TIPO_EVALUACION"));
                tipoEvaluacion.setNombreTipoEvaluacion(rs.getString("NOMBRE_TIPO_EVALUACION"));
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return tipoEvaluacion;
    }

    public TipoEvaluacion seleccionarPorNombre(String nombre) {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        TipoEvaluacion tipoEvaluacion = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM TIPO_EVALUACION WHERE NOMBRE_TIPO_EVALUACION = ?");
            st.setString(1, nombre);
            rs = st.executeQuery();
            if (rs.next()) {
                tipoEvaluacion = new TipoEvaluacion();
                tipoEvaluacion.setIdTipoEvaluacion(rs.getLong("ID_TIPO_EVALUACION"));
                tipoEvaluacion.setNombreTipoEvaluacion(rs.getString("NOMBRE_TIPO_EVALUACION"));
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return tipoEvaluacion;
    }

    public void insertar(TipoEvaluacion tipoEvaluacion) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void actualizar(TipoEvaluacion tipoEvaluacion) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void eliminar(TipoEvaluacion tipoEvaluacion) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<TipoEvaluacion> seleccionarTodos() {
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        TipoEvaluacion tipoEvaluacion = null;
        List<TipoEvaluacion> lista = new ArrayList<TipoEvaluacion>();
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("SELECT * FROM TIPO_EVALUACION");
            rs = st.executeQuery();
            while (rs.next()) {
                tipoEvaluacion = mapResultSet(rs);
                lista.add(tipoEvaluacion);
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return lista;
    }

    private TipoEvaluacion mapResultSet(ResultSet rs) throws SQLException {
        TipoEvaluacion tipoEvaluacion = new TipoEvaluacion();
        tipoEvaluacion.setIdTipoEvaluacion(rs.getLong("ID_TIPO_EVALUACION"));
        tipoEvaluacion.setNombreTipoEvaluacion(rs.getString("NOMBRE_TIPO_EVALUACION"));

        return tipoEvaluacion;
    }
}
